3.6.11.3 hmread-半精度行列レジスタ読み出し
半精度データの行列レジスタからの読み出しを行う。
code:文法
hmread $ll(x|y)<addr> <dst_0> <dst_1>..
$ll(x|y)は読み出し元の行列レジスタオペランドである。
hmwriteと違い常にサイクルあたり 2 行が読み出される。
(x|y)はどちらの行列レジスタから読み出すかの指定であり、以下効果においてsideとして参照する。
<addr>は読み出しを開始する列番号である。
サイクルごとに連続する列を重複なくアクセスするようにインクリメントされる。
<addr>は 2 の倍数でなければならない。
半精度行列データは 16 行 16 列であるので、 2 命令で行列データ全体を行列レジスタから読み出すことができる。
<dst_0> [<dst_1>..]は書き込み先PEオペランドである。
複数のPEメモリに同時に書き込むことができるが、以下効果では簡単のため単一の書き込み先としてdstを指定した例を示している。
読み出した内容は通常の半精度であり、書き込みのアクセス語長は 2 長語である。
code:効果
for cycle= 0:4
forall chip,l2b,l1b,mab
HalfWord src_data48
for i= 0:16
src_datai/4i%4 =MEMchipl2bl1bmab.refer_matreg(side,HalfWord)i[(
addr+cycle*2)%16]
src_datai/4i%4+4 =MEMchipl2bl1bmab.refer_matreg(side, HalfWord)i(addr+cycle*2)%16+1
forall pe
MEMchipl2bl1bmabpe.refer_pemem(dst,cycle) =src_datape: